Linux线程性能分析和CPU亲和力 您所在的位置:网站首页 Linux 查看每个核上任务 sched_debug Linux线程性能分析和CPU亲和力

Linux线程性能分析和CPU亲和力

2024-06-03 13:24| 来源: 网络整理| 查看: 265

一,线程迁移和负载均衡

        Linux系统在多核CPU和SMP系统上有完善的负载均衡支持。在SMP系统中,每个CPU的核都有一个迁移线程守护程序migration(一般是系统最高优先级139,实时99),以实现执行资源平衡作业。当我们调用sched_setaffinity系统调用将一个线程从源CPU核迁移到目标CPU核,并且该线程正在运行或处于TASK_WAKING状态,则迁移作业将打包到源CPU的迁移线程的工作队列中,然后,迁移线程将被唤醒以完成迁移工作。

        在对多核系统的进程或者线程进行性能分析时,有一些需要分析和注意的点,如:线程的优先级,线程对CPU核的占用情况,线程调度等等。

二,通过ps命令查看线程的调度和运行核

        在linux系统中,执行线程任务的核用P或者PSR表示,即Last Used CPU(SMP),表示最近一次执行线程的CPU core核。

1,ps -eLF

         下面的命令可以持续监测某一个核调度运行的所有线程,本实例为排序显示核5调度的所有线程。

while true; do ps -eLF | awk '{print $2,$3,$4,$9}' | sort -n -k 4 | grep " 5$"; done

 2,ps命令指定查看某些特定的项

ps H -eotid,pid,ppid,pri,rtprio,psr,state,%cpu,%mem,cmd

备注,STATE(S):代表该进程目前的状态,主要的状态有: R:该进程正在运行S:该进程正在休眠,但可被某些信号(signal)唤醒D:无法中断的休眠状态(通常为IO进程)T:该进程已经停止Z:僵死状态,该进程应该已经终止,但是其父进程却无法正常的终止它,造成zombie(疆尸)程序的状态W:等待状态,等待内存的分配         printf("succeeded to set affinity.\n");     }

中断隔离

        绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到interrupt而被消耗,造成绑定在其上的线程的调度。

        IRQ(Interrupt request)是硬件级别的服务请求,IRQ都有一个亲和度属性smp_affinity,smp_affinity决定允许哪些CPU核心处理该IRQ。当前Linux的某一特定IRQ的亲和度值储存在/proc/irq/IRP_NUMBER/smp_affinity文件中,只有ROOT权限用户可见和可操作。该值是一个十六进制位掩码(hexadecimal bit-mask),代表着系统的所有CPU核,跟taskset和CPU_SET一样,每一个bit对应一个CPU核。

        命令cat /proc/interrupts可以看到所有设备的interrupts信息,第一列即为IRP_NUMBER。

        命令cat /proc/irq/32/smp_affinity可以看到IRQ号为32的亲和度,默认值为f(跟CPU的核数紧密相关,此处f表示4核CPU),代表这个IRP能被所有CPU接受处理。

        命令echo 1 >/proc/irq/32/smp_affinity把IRQ号为32的亲和度值设为1,代表这个IRP仅能被CPU0接受处理。echo 1fefffff > /proc/irq/32/smp_affinity,表示32号中断不送到CPU的20,29-31核。

        其他类推,我们可以据要求任意绑定IRQ到CPU。不过,系统中仍有一部分中断没有被绑定,例如:Single function call interrupts, Local timer interrupts等等。

六、结语

        对于性能和延迟要求高的线程,以及如何提升CPU资源紧张的系统,本文仅从Linux系统的调度方面进行了简单的描述,通过上述的方法和一些原则进行调整和优化,也许可以逐步使系统和线程达到最佳的平衡。当然线程优先级的合理分配,系统资源的平衡调度,对于性能要求高的系统的整体性能,也有很大的影响!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有